Published on March 14, 2025

备用返回通道

转到题目


前备知识

这个题目实际上就是个模拟题,几乎是只要会语法就可以做出来 但是有一个问题就是

大家都会,你怎么样轻松的做出,优雅的做出来?

我的经验是:先思后动 如果你看到题目就开始码,但凡过程中出现一点点坑位,你也就崩了。

因此,就算是简单的题,一定是要在大脑有了大致的逻辑闭环后再进行码 如果发现很难维护,这个方式大概率不会成功

思路

1 2 6 7
3 5 8 13
4 9 12 14
10 11 15 16

与负对角线平行的满足i+j为定值 根据i是奇数函数偶数,判定遍历方向 枚举i确定j 因此根据奇偶性确定j的枚举顺序就好

#include <iostream>
using namespace std;
int a[1000][1000];
int main()
{
	int n,i,j,cnt=0;
	cin>>n;
	for(i=0;i<2*n-1;i++)
		for(j=i;j>=0;j--)
		{
			if(j>=n||i-j>=n)  continue;
            cnt++;
			if(i%2!=0) a[i-j][j]=cnt;
			else a[j][i-j]=cnt;
		}
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++) cout<<a[i][j]<<" ";
		cout<<"\n";
	}
}